class Person:
    def setName(self,name):
        self.name=name

    def getName(self):
        return self.name
    def sayHello(self):
        print('你好%s'%self.name)
    #类的方法私有化只需在方法名前加两个下划线即可
    #实际上，这种类型的私有化并不是绝对不能被调用的，可采用下划线_加类名+私有化方法名即可调用
    def __sayBeautiful(self):
        print('beautiful')
p=Person()
p.setName('老刘')
print(p.getName())
p.sayHello()
p._Person__sayBeautiful()
#hasattr(o,str(name)) 实例化对象，方法名或属性
print(hasattr(p,'getName'))
print(hasattr(p,'name'))
#gettattr(object,'name','default=None')如果name1不存在，就执行default内的语句
m=getattr(p,'sayHello',p.getName())
m()#你好老刘
#setattr设置一个默认方法 setattr(实例化对象,'属性(你想改的方法名)',属性值(你想改成的方法名))
setattr(p,'age',18)
print(p.age)#18
#inspect 库获取私有化的方法
import inspect
method=inspect.getmembers(p,predicate=inspect.ismethod)
print(method)
